// 文件名称: GroupManagementController.java
// 创建日期: 2023-10-05
// 描述: 小组管理控制器类，负责处理小组管理界面的各种操作。

package org.wisdom.studentchoose;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.*;
import java.io.IOException;
import java.util.List;
import javafx.stage.Stage;
import org.wisdom.studentchoose.db.Group;

public class GroupManagementController {

    @FXML
    private ComboBox<String> classComboBox; // 班级下拉菜单

    @FXML
    private TextField addGroupField; // 添加小组名称输入框

    @FXML
    private TextField deleteGroupField; // 删除小组名称输入框

    @FXML
    private TableView<Group> groupList; // 小组列表表格

    @FXML
    private TableColumn<Group, Integer> groupIdColumn; // 小组ID列

    @FXML
    private TableColumn<Group, String> groupNameColumn; // 小组名称列

    @FXML
    private TableColumn<Group, String> groupClassColumn; // 班级列

    private ObservableList<Group> groups; // 小组数据列表

    @FXML
    public void initialize() {
        // 初始化班级下拉菜单
        List<String> classes = getClassList(); // 假设这是一个获取班级列表的方法
        classComboBox.getItems().addAll(classes);

        // 设置表格列的数据
        groupIdColumn.setCellValueFactory(cellData -> cellData.getValue().idProperty().asObject());
        groupNameColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
        groupClassColumn.setCellValueFactory(cellData -> cellData.getValue().classProperty());

        // 加载初始数据
        loadGroups();
    }

    public GroupManagementController() {
        // 初始化 groups 为一个可修改的列表
        groups = FXCollections.observableArrayList();
    }

    private List<String> getClassList() {
        return Group.getAllClassNamesFromClassesTable(); // 获取所有班级名称
    }

    private void loadGroups() {
        // 清空当前的组列表
        groups.clear();
        // 将所有组添加到列表中
        groups.addAll(Group.getAllGroups());
        groupList.setItems(groups); // 更新表格数据
    }

    @FXML
    private void handleAddGroupButtonClick(ActionEvent event) {
        String selectedClass = classComboBox.getValue();
        if (selectedClass == null || selectedClass.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "请选择一个班级");
            alert.showAndWait();
            return;
        }

        String groupName = addGroupField.getText();
        if (groupName == null || groupName.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "请输入小组名称");
            alert.showAndWait();
            return;
        }

        // 检查对应班级下是否有相同名称的小组
        boolean groupExists = Group.groupExists(groupName, selectedClass);
        if (groupExists) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "该班级下已存在同名小组: " + groupName);
            alert.showAndWait();
            return; // 停止执行后续操作
        }

        Group newGroup = new Group(groupName, selectedClass);
        Group.insertGroup(newGroup); // 插入新小组
        loadGroups(); // 重新加载数据以更新表格
        addGroupField.clear(); // 清空输入框
    }

    @FXML
    private void handleDeleteGroupButtonClick(ActionEvent event) {
        String groupName = deleteGroupField.getText();
        String selectedClass = classComboBox.getValue();

        if (groupName == null || groupName.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "请输入要删除的小组名称");
            alert.showAndWait();
            return;
        }

        if (selectedClass == null || selectedClass.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR, "请选择一个班级");
            alert.showAndWait();
            return;
        }

        Group groupToRemove = groups.stream()
                .filter(group -> group.getName().equals(groupName) && group.getClassName().equals(selectedClass))
                .findFirst()
                .orElse(null);

        if (groupToRemove != null) {
            Group.deleteGroup(groupToRemove.getId()); // 删除小组
            loadGroups(); // 重新加载数据以更新表格
            deleteGroupField.clear(); // 清空输入框
        } else {
            Alert alert = new Alert(Alert.AlertType.ERROR, "未找到指定的小组");
            alert.showAndWait();
        }
    }

    @FXML
    private void handleBackButtonClick(ActionEvent event) {
        try {
            // 加载主菜单界面的 FXML 文件
            FXMLLoader fxmlLoader = new FXMLLoader(HelloApplication.class.getResource("menu-view.fxml"));
            Scene scene = new Scene(fxmlLoader.load(), 400, 300); // 设置主菜单界面的大小
            Stage stage = (Stage) ((Button) event.getSource()).getScene().getWindow();
            stage.setScene(scene); // 设置新的场景
            stage.show(); // 显示新的窗口
        } catch (IOException e) {
            e.printStackTrace(); // 打印异常堆栈信息
        }
    }
}
